package com.ruoyi.web.service.device;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.web.domain.device.DeviceInfo;
import com.ruoyi.web.domain.device.DeviceNumber;
import com.ruoyi.web.pojo.request.device.DeviceInfoRequest;
import com.ruoyi.web.utils.v2.V2DeviceInfo;

import java.util.List;

/**
 * 设备管理 服务类
 * @author fwx
 * @date 2024-01-08 16:03:56
 */
public interface DeviceInfoService extends IService<DeviceInfo> {
    /**
    * 新增设备管理
    * @author fwx
    * @date 2024-1-8 16:03:56
    */
    public void insert(DeviceInfo deviceInfo);

    /**
    * 修改设备管理
    * @author fwx
    * @date 2024-1-8 16:03:56
    */
    public void update(DeviceInfo deviceInfo);

    /**
    * 删除设备管理
    * @author fwx
    * @date 2024-1-8 16:03:56
    */
    public void delete(String id);


    /**
     * @desc  得到用户下所有设备
     * @author fwx 2024/1/29 16:37
     * @param deviceType 设备类型 如果为空 查询全部
     **/
    public List<DeviceInfo> getByUser(String deviceType);

    /**
     * @desc  根据条件查询用户下的设备
     * @author fwx 2024/5/24 16:55
     **/
    public List<DeviceInfo> getByUser(DeviceInfoRequest request);

    /**
     * @desc  得到用户下的设备id
     * @author fwx 2024/3/6 15:19
     **/
    public List<String> getIdsByUser(String deviceType);

    /**
     * @desc  得到用户下所有设备
     * @author fwx 2024/1/29 16:37
     **/
    public List<DeviceInfo> getByUser();

    /**
    * 分页查询设备管理
    * @author fwx
    * @date 2024-1-8 16:03:56
    */
    public IPage<DeviceInfo> queryPage(DeviceInfoRequest request);

    /**
     * @desc  根据设备类型查询 - 用户下的
     * @author fwx 2024/2/6 15:20
     **/
    List<DeviceInfo> getByDeviceType(String deviceType);

    /**
     * @desc  根据设备类型查询 - 所有设备
     * @author fwx 2024/5/24 15:49
     **/
    List<DeviceInfo> getAllDeviceByType(String deviceType);


    /**
    * 查询所有设备管理
    * @author fwx
    * @date 2024-1-8 16:03:56
    */
    public List<DeviceInfo> queryAll(DeviceInfoRequest request);

    /**
     * @desc  根据设备id查询
     * @author fwx 2024/1/9 11:17
     **/
    public DeviceInfo getByDeviceId(String deviceId);

    /**
     * @desc  根据设备id批量查询
     * @author fwx 2024/3/8 15:45
     **/
    public List<DeviceInfo> getByDeviceId(List<String> deviceIds);

    /**
     * @desc  根据产品id查询设备
     * @author fwx 2024/2/3 13:38
     **/
    public List<DeviceInfo> getByProductId(List<Long> productIds);

    /**
     * @desc  绑定设备 type 1 表示二维码编号 2 表示设备号
     * @author fwx 2024/1/9 10:15
     **/
    public void bindDevice(String no,Integer type);

    /**
     * @desc  根据二维码或者设备编号查询设备信息
     * @author fwx 2024/1/17 16:14
     **/
    public V2DeviceInfo getV2Device(String no, Integer type);

    /**
     * @desc  根据配置的产品ID查询设备用户下设备
     * @author fwx 2024/5/13 11:04
     **/
    public List<DeviceInfo> getDeviceByCode(String code);

    /**
     * @desc  设备数量统计
     * @author fwx 2024/5/27 16:40
     **/
    public DeviceNumber getDeviceNumber();

    /**
     * @desc  根据配置的产品ID查询设备用户下设备号
     * @author fwx 2024/5/13 11:04
     **/
    public List<String> getDeviceNoByCode(String code);

    /**
    * 根据id查询设备管理
    * @author fwx
    * @date 2024-1-8 16:03:56
    */
    public DeviceInfo findById(String id);

}
